/**
 * @file FormatPlugin.h
 * @brief 压缩格式插件接口定义
 * @details 定义了所有压缩格式插件必须实现的接口
 */

#ifndef FORMAT_PLUGIN_H
#define FORMAT_PLUGIN_H

#include <SupportDefs.h>
#include <String.h>
#include <Path.h>

/**
 * @class FormatPlugin
 * @brief 压缩格式插件基类
 * @details 所有具体格式的插件都必须继承此类并实现其接口
 */
class FormatPlugin
{
public:
    /**
     * @brief 构造函数
     */
    FormatPlugin() {}

    /**
     * @brief 虚析构函数
     */
    virtual ~FormatPlugin() {}

    /**
     * @brief 获取插件支持的格式名称
     * @return 格式名称
     */
    virtual BString GetFormatName() const = 0;

    /**
     * @brief 获取插件支持的文件扩展名列表
     * @return 扩展名列表，以分号分隔
     */
    virtual BString GetSupportedExtensions() const = 0;

    /**
     * @brief 检查插件是否支持指定的文件
     * @param filePath 文件路径
     * @return 是否支持
     */
    virtual bool CanHandle(const char *filePath) const = 0;

    /**
     * @brief 压缩文件或目录
     * @param sourcePath 源文件或目录路径
     * @param targetPath 目标压缩文件路径
     * @return 操作是否成功
     */
    virtual bool Compress(const char *sourcePath, const char *targetPath) = 0;

    /**
     * @brief 解压缩文件
     * @param sourcePath 源压缩文件路径
     * @param targetPath 目标解压目录
     * @return 操作是否成功
     */
    virtual bool Extract(const char *sourcePath, const char *targetPath) = 0;

    /**
     * @brief 列出压缩文件中的内容
     * @param archivePath 压缩文件路径
     * @return 内容列表字符串
     */
    virtual BString ListContents(const char *archivePath) = 0;
};

/**
 * @brief 插件创建函数类型定义
 * @details 每个插件动态库必须导出名为"CreatePlugin"的函数，返回插件实例
 */
typedef FormatPlugin *(*CreatePluginFunc)();

#endif // FORMAT_PLUGIN_H